<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>SCTLR</title>
    <link href="insn.css" rel="stylesheet" type="text/css"/>
  </head>
  <body><table style="margin: 0 auto;"><tr><td><div class="topbar"><a href="AArch32-regindex.html">AArch32 Registers</a></div></td><td><div class="topbar"><a href="AArch64-regindex.html">AArch64 Registers</a></div></td><td><div class="topbar"><a href="AArch32-sysindex.html">AArch32 Instructions</a></div></td><td><div class="topbar"><a href="AArch64-sysindex.html">AArch64 Instructions</a></div></td><td><div class="topbar"><a href="enc_index.html">Index by Encoding</a></div></td><td><div class="topbar"><a href="ext_alpha_index.html">External Registers</a></div></td><td><div class="topbar"><a href="ext_enc_index.html">External Registers by Offset</a></div></td><td><div class="topbar"><a href="func_index.html">Registers by Functional Group</a></div></td><td><div class="topbar"><a href="notice.html">Proprietary Notice</a></div></td></tr></table><hr/><h1 class="register-section">SCTLR, System Control Register</h1><p>The SCTLR characteristics are:</p><h2>Purpose</h2>
        <p>Provides the top level control of the system, including its memory system.</p>
      <h2>Configuration</h2><p>AArch32 System register SCTLR bits [31:0] are architecturally mapped to AArch64 System register <a href="AArch64-sctlr_el1.html">SCTLR_EL1[31:0]</a>.</p><p>This register is present only when EL1 is capable of using AArch32. Otherwise, direct accesses to SCTLR are <span class="arm-defined-word">UNDEFINED</span>.</p>
        <p>Some bits in the register are read-only. These bits relate to non-configurable features of an implementation, and are provided for compatibility with previous versions of the architecture.</p>
      <h2>Attributes</h2>
        <p>SCTLR is a 32-bit register.</p>
      <h2>Field descriptions</h2><table class="regdiagram"><thead><tr><td>31</td><td>30</td><td>29</td><td>28</td><td>27</td><td>26</td><td>25</td><td>24</td><td>23</td><td>22</td><td>21</td><td>20</td><td>19</td><td>18</td><td>17</td><td>16</td><td>15</td><td>14</td><td>13</td><td>12</td><td>11</td><td>10</td><td>9</td><td>8</td><td>7</td><td>6</td><td>5</td><td>4</td><td>3</td><td>2</td><td>1</td><td>0</td></tr></thead><tbody><tr class="firstrow"><td class="lr" colspan="1"><a href="#fieldset_0-31_31-1">DSSBS</a></td><td class="lr" colspan="1"><a href="#fieldset_0-30_30">TE</a></td><td class="lr" colspan="1"><a href="#fieldset_0-29_29">AFE</a></td><td class="lr" colspan="1"><a href="#fieldset_0-28_28">TRE</a></td><td class="lr" colspan="2"><a href="#fieldset_0-27_26">RES0</a></td><td class="lr" colspan="1"><a href="#fieldset_0-25_25">EE</a></td><td class="lr" colspan="1"><a href="#fieldset_0-24_24">RES0</a></td><td class="lr" colspan="1"><a href="#fieldset_0-23_23-1">SPAN</a></td><td class="lr" colspan="1"><a href="#fieldset_0-22_22">RES1</a></td><td class="lr" colspan="1"><a href="#fieldset_0-21_21">RES0</a></td><td class="lr" colspan="1"><a href="#fieldset_0-20_20">UWXN</a></td><td class="lr" colspan="1"><a href="#fieldset_0-19_19">WXN</a></td><td class="lr" colspan="1"><a href="#fieldset_0-18_18">nTWE</a></td><td class="lr" colspan="1"><a href="#fieldset_0-17_17">RES0</a></td><td class="lr" colspan="1"><a href="#fieldset_0-16_16">nTWI</a></td><td class="lr" colspan="2"><a href="#fieldset_0-15_14">RES0</a></td><td class="lr" colspan="1"><a href="#fieldset_0-13_13">V</a></td><td class="lr" colspan="1"><a href="#fieldset_0-12_12">I</a></td><td class="lr" colspan="1"><a href="#fieldset_0-11_11">RES1</a></td><td class="lr" colspan="1"><a href="#fieldset_0-10_10-1">EnRCTX</a></td><td class="lr" colspan="1"><a href="#fieldset_0-9_9">RES0</a></td><td class="lr" colspan="1"><a href="#fieldset_0-8_8">SED</a></td><td class="lr" colspan="1"><a href="#fieldset_0-7_7">ITD</a></td><td class="lr" colspan="1"><a href="#fieldset_0-6_6">UNK</a></td><td class="lr" colspan="1"><a href="#fieldset_0-5_5">CP15BEN</a></td><td class="lr" colspan="1"><a href="#fieldset_0-4_4-1">LSMAOE</a></td><td class="lr" colspan="1"><a href="#fieldset_0-3_3-1">nTLSMD</a></td><td class="lr" colspan="1"><a href="#fieldset_0-2_2">C</a></td><td class="lr" colspan="1"><a href="#fieldset_0-1_1">A</a></td><td class="lr" colspan="1"><a href="#fieldset_0-0_0">M</a></td></tr></tbody></table><h4 id="fieldset_0-31_31-1">DSSBS, bit [31]<span class="condition"><br/>When FEAT_SSBS is implemented:
                        </span></h4><div class="field">
      <p>Default PSTATE.SSBS value on Exception Entry. The defined values are:</p>
    <table class="valuetable"><tr><th>DSSBS</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>PSTATE.SSBS is set to 0 on an exception to any mode in this security state except Hyp mode</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>PSTATE.SSBS is set to 1 on an exception to any mode in this security state except Hyp mode</p>
        </td></tr></table>
      <div class="note"><span class="note-header">Note</span>
        <p>When EL3 is implemented and is using AArch32, this bit is banked between the two Security states.</p>
      </div>
    <p>The reset behavior of this field is:</p><ul><li>
                        On a Warm reset,
                        
      this field resets
       to an <span class="arm-defined-word">IMPLEMENTATION DEFINED</span> value.</li></ul></div><h4 id="fieldset_0-31_31-2"><span class="condition"><br/>Otherwise:
                        </span></h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES0</span>.</p>
    </div><h4 id="fieldset_0-30_30">TE, bit [30]</h4><div class="field">
      <p>T32 Exception Enable. This bit controls whether exceptions to an Exception level that is executing at PL1 are taken to A32 or T32 state:</p>
    <table class="valuetable"><tr><th>TE</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>Exceptions, including reset, taken to A32 state.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>Exceptions, including reset, taken to T32 state.</p>
        </td></tr></table><p>The reset behavior of this field is:</p><ul><li>
                        On a Warm reset,
                        
      this field resets
       to an <span class="arm-defined-word">IMPLEMENTATION DEFINED</span> value.</li></ul></div><h4 id="fieldset_0-29_29">AFE, bit [29]</h4><div class="field">
      <p>Access Flag Enable. When using the Short-descriptor translation table format for the PL1&amp;0 translation regime, this bit enables use of the AP[0] bit in the translation descriptors as the Access flag, and restricts access permissions in the translation descriptors to the simplified model.</p>
    <table class="valuetable"><tr><th>AFE</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>In the Translation table descriptors, AP[0] is an access permissions bit. The full range of access permissions is supported. No Access flag is implemented.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>In the Translation table descriptors, AP[0] is the Access flag. Only the simplified model for access permissions is supported.</p>
        </td></tr></table><p>When using the Long-descriptor translation table format, the VMSA behaves as if this bit is set to 1, regardless of the value of this bit.</p>
<p>The AFE bit is permitted to be cached in a TLB.</p><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><h4 id="fieldset_0-28_28">TRE, bit [28]</h4><div class="field">
      <p>TEX remap enable. This bit enables remapping of the TEX[2:1] bits in the PL1&amp;0 translation regime for use as two translation table bits that can be managed by the operating system. Enabling this remapping also changes the scheme used to describe the memory region attributes in the VMSA.</p>
    <table class="valuetable"><tr><th>TRE</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>TEX remap disabled. TEX[2:0] are used, with the C and B bits, to describe the memory region attributes.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>TEX remap enabled. TEX[2:1] are reassigned for use as bits managed by the operating system. The TEX[0], C, and B bits are used to describe the memory region attributes, with the MMU remap registers.</p>
        </td></tr></table><p>When the value of <a href="AArch32-ttbcr.html">TTBCR</a>.EAE is 1, this bit is <span class="arm-defined-word">RES1</span>.</p>
<p>The TRE bit is permitted to be cached in a TLB.</p><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><h4 id="fieldset_0-27_26">Bits [27:26]</h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES0</span>.</p>
    </div><h4 id="fieldset_0-25_25">EE, bit [25]</h4><div class="field">
      <p>The value of the PSTATE.E bit on branch to an exception vector or coming out of reset, and the endianness of stage 1 translation table walks in the PL1&amp;0 translation regime.</p>
    <table class="valuetable"><tr><th>EE</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>Little-endian. PSTATE.E is cleared to 0 on taking an exception or coming out of reset. Stage 1 translation table walks in the PL1&amp;0 translation regime are little-endian.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>Big-endian. PSTATE.E is set to 1 on taking an exception or coming out of reset. Stage 1 translation table walks in the PL1&amp;0 translation regime are big-endian.</p>
        </td></tr></table><p>If an implementation does not provide Big-endian support for data accesses at Exception levels higher than EL0, this bit is <span class="arm-defined-word">RES0</span>.</p>
<p>If an implementation does not provide Little-endian support for data accesses at Exception levels higher than EL0, this bit is <span class="arm-defined-word">RES1</span>.</p><p>The reset behavior of this field is:</p><ul><li>
                        On a Warm reset,
                        
      this field resets
       to an <span class="arm-defined-word">IMPLEMENTATION DEFINED</span> value.</li></ul></div><h4 id="fieldset_0-24_24">Bit [24]</h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES0</span>.</p>
    </div><h4 id="fieldset_0-23_23-1">SPAN, bit [23]<span class="condition"><br/>When FEAT_PAN is implemented:
                        </span></h4><div class="field">
      <p>Set Privileged Access Never, on taking an exception to EL1 from either Secure or Non-secure state, or to EL3 from Secure state when EL3 is using AArch32.</p>
    <table class="valuetable"><tr><th>SPAN</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td><p>PSTATE.PAN is set to 1 in the following situations:</p>
<ul>
<li>In Non-secure state, on taking an exception to EL1.
</li><li>In Secure state, when EL3 is using AArch64, on taking an exception to EL1.
</li><li>In Secure state, when EL3 is using AArch32, on taking an exception to EL3.
</li></ul></td></tr><tr><td class="bitfield">0b1</td><td>
          <p>The value of PSTATE.PAN is left unchanged on taking an exception to EL1.</p>
        </td></tr></table><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to an architecturally <span class="arm-defined-word">UNKNOWN</span> value.</li></ul></div><h4 id="fieldset_0-23_23-2"><span class="condition"><br/>Otherwise:
                        </span></h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES1</span>.</p>
    </div><h4 id="fieldset_0-22_22">Bit [22]</h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES1</span>.</p>
    </div><h4 id="fieldset_0-21_21">Bit [21]</h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES0</span>.</p>
    </div><h4 id="fieldset_0-20_20">UWXN, bit [20]</h4><div class="field">
      <p>Unprivileged write permission implies PL1 XN (Execute-never). This bit can force all memory regions that are writable at PL0 to be treated as XN for accesses from software executing at PL1.</p>
    <table class="valuetable"><tr><th>UWXN</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>This control has no effect on memory access permissions.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>Any region that is writable at PL0 forced to XN for accesses from software executing at PL1.</p>
        </td></tr></table>
      <p>The UWXN bit is permitted to be cached in a TLB.</p>
    <p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><h4 id="fieldset_0-19_19">WXN, bit [19]</h4><div class="field">
      <p>Write permission implies XN (Execute-never). For the PL1&amp;0 translation regime, this bit can force all memory regions that are writable to be treated as XN.</p>
    <table class="valuetable"><tr><th>WXN</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>This control has no effect on memory access permissions.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>Any region that is writable in the PL1&amp;0 translation regime is forced to XN for accesses from software executing at PL1 or PL0.</p>
        </td></tr></table><p>This bit applies only when SCTLR.M bit is set.</p>
<p>The WXN bit is permitted to be cached in a TLB.</p><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><h4 id="fieldset_0-18_18">nTWE, bit [18]</h4><div class="field">
      <p>Traps EL0 execution of WFE instructions to Undefined mode.</p>
    <table class="valuetable"><tr><th>nTWE</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>Any attempt to execute a WFE instruction at EL0 is trapped to Undefined mode, if the instruction would otherwise have caused the PE to enter a low-power state.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>This control does not cause any instructions to be trapped.</p>
        </td></tr></table><p>The attempted execution of a conditional WFE instruction is only trapped if the instruction passes its condition code check.</p>
<div class="note"><span class="note-header">Note</span><p>Since a WFE or WFI can complete at any time, even without a Wakeup event, the traps on WFE of WFI are not guaranteed to be taken, even if the WFE or WFI is executed when there is no Wakeup event. The only guarantee is that if the instruction does not complete in finite time in the absence of a Wakeup event, the trap will be taken.</p></div><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">1</span>.
</li></ul></div><h4 id="fieldset_0-17_17">Bit [17]</h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES0</span>.</p>
    </div><h4 id="fieldset_0-16_16">nTWI, bit [16]</h4><div class="field">
      <p>Traps EL0 execution of WFI instructions to Undefined mode.</p>
    <table class="valuetable"><tr><th>nTWI</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>Any attempt to execute a WFI instruction at EL0 is trapped to Undefined mode, if the instruction would otherwise have caused the PE to enter a low-power state.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>This control does not cause any instructions to be trapped.</p>
        </td></tr></table><p>The attempted execution of a conditional WFI instruction is only trapped if the instruction passes its condition code check.</p>
<div class="note"><span class="note-header">Note</span><p>Since a WFE or WFI can complete at any time, even without a Wakeup event, the traps on WFE of WFI are not guaranteed to be taken, even if the WFE or WFI is executed when there is no Wakeup event. The only guarantee is that if the instruction does not complete in finite time in the absence of a Wakeup event, the trap will be taken.</p></div><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">1</span>.
</li></ul></div><h4 id="fieldset_0-15_14">Bits [15:14]</h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES0</span>.</p>
    </div><h4 id="fieldset_0-13_13">V, bit [13]</h4><div class="field">
      <p>Vectors bit. This bit selects the base address of the exception vectors for exceptions taken to a PE mode other than Monitor mode or Hyp mode:</p>
    <table class="valuetable"><tr><th>V</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>Normal exception vectors. Base address is held in <a href="AArch32-vbar.html">VBAR</a>.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>High exception vectors (Hivecs), base address <span class="hexnumber">0xFFFF0000</span>. This base address cannot be remapped.</p>
        </td></tr></table><p>The reset behavior of this field is:</p><ul><li>
                        On a Warm reset,
                        
      this field resets
       to an <span class="arm-defined-word">IMPLEMENTATION DEFINED</span> value.</li></ul></div><h4 id="fieldset_0-12_12">I, bit [12]</h4><div class="field">
      <p>Instruction access Cacheability control, for accesses at EL1 and EL0:</p>
    <table class="valuetable"><tr><th>I</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td><p>All instruction access to Normal memory from PL1 and PL0 are Non-cacheable for all levels of instruction and unified cache.</p>
<p>If the value of SCTLR.M is 0, instruction accesses from stage 1 of the PL1&amp;0 translation regime are to Normal, Outer Shareable, Inner Non-cacheable, Outer Non-cacheable memory.</p></td></tr><tr><td class="bitfield">0b1</td><td><p>All instruction access to Normal memory from PL1 and PL0 can be cached at all levels of instruction and unified cache.</p>
<p>If the value of SCTLR.M is 0, instruction accesses from stage 1 of the PL1&amp;0 translation regime are to Normal, Outer Shareable, Inner Write-Through, Outer Write-Through memory.</p></td></tr></table><p>Instruction accesses to Normal memory from EL1 and EL0 are Cacheable regardless of the value of the SCTLR.I bit if either:</p>
<ul>
<li>EL2 is using AArch32 and the value of <a href="AArch32-hcr.html">HCR</a>.DC is 1.
</li><li>EL2 is using AArch64 and the value of <a href="AArch64-hcr_el2.html">HCR_EL2</a>.DC is 1.
</li></ul><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><h4 id="fieldset_0-11_11">Bit [11]</h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES1</span>.</p>
    </div><h4 id="fieldset_0-10_10-1">EnRCTX, bit [10]<span class="condition"><br/>When FEAT_SPECRES is implemented:
                        </span></h4><div class="field"><p>Enable EL0 access to the following System instructions:</p>
<ul>
<li><a href="AArch32-cfprctx.html">CFPRCTX</a>.
</li><li><a href="AArch32-dvprctx.html">DVPRCTX</a>.
</li><li><a href="AArch32-cpprctx.html">CPPRCTX</a>.
</li><li>If FEAT_SPECRES2 is implemented, <a href="AArch32-cosprctx.html">COSPRCTX</a>.
</li></ul><table class="valuetable"><tr><th>EnRCTX</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>EL0 access to these instructions is disabled, and these instructions are trapped to EL1.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>EL0 access to these instructions is enabled.</p>
        </td></tr></table>
      <div class="note"><span class="note-header">Note</span>
        <p>When EL3 is implemented and is using AArch32, this bit is banked between the two Security states.</p>
      </div>
    <p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to an architecturally <span class="arm-defined-word">UNKNOWN</span> value.</li></ul></div><h4 id="fieldset_0-10_10-2"><span class="condition"><br/>Otherwise:
                        </span></h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES0</span>.</p>
    </div><h4 id="fieldset_0-9_9">Bit [9]</h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES0</span>.</p>
    </div><h4 id="fieldset_0-8_8">SED, bit [8]</h4><div class="field">
      <p>SETEND instruction disable. Disables SETEND instructions at PL0 and PL1.</p>
    <table class="valuetable"><tr><th>SED</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>SETEND instruction execution is enabled at PL0 and PL1.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>SETEND instructions are <span class="arm-defined-word">UNDEFINED</span> at PL0 and PL1.</p>
        </td></tr></table>
      <p>If the implementation does not support mixed-endian operation at any Exception level, this bit is <span class="arm-defined-word">RES1</span>.</p>
    <p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><h4 id="fieldset_0-7_7">ITD, bit [7]</h4><div class="field">
      <p>IT Disable. Disables some uses of IT instructions at PL1 and PL0.</p>
    <table class="valuetable"><tr><th>ITD</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>All IT instruction functionality is enabled at PL1 and PL0.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td><p>Any attempt at PL1 or PL0 to execute any of the following is <span class="arm-defined-word">UNDEFINED</span>:</p>
<ul>
<li>All encodings of the IT instruction with hw1[3:0]!=1000.
</li><li>All encodings of the subsequent instruction with the following values for hw1:<ul>
<li>11xxxxxxxxxxxxxx: All 32-bit instructions, and the 16-bit instructions B, UDF, SVC, LDM, and STM.
</li><li>1011xxxxxxxxxxxx: All instructions in <span class="xref">'Miscellaneous 16-bit instructions'</span>.
</li><li>10100xxxxxxxxxxx: ADD Rd, PC, #imm
</li><li>01001xxxxxxxxxxx: LDR Rd, [PC, #imm]
</li><li>0100x1xxx1111xxx: ADD Rdn, PC; CMP Rn, PC; MOV Rd, PC; BX PC; BLX PC.
</li><li>010001xx1xxxx111: ADD PC, Rm; CMP PC, Rm; MOV PC, Rm. This pattern also covers unpredictable cases with BLX Rn.
</li></ul>

</li></ul>
<p>These instructions are always <span class="arm-defined-word">UNDEFINED</span>, regardless of whether they would pass or fail the condition code check that applies to them as a result of being in an IT block.</p>
<p>It is <span class="arm-defined-word">IMPLEMENTATION DEFINED</span> whether the IT instruction is treated as:</p>
<ul>
<li>A 16-bit instruction, that can only be followed by another 16-bit instruction.
</li><li>The first half of a 32-bit instruction.
</li></ul>
<p>This means that, for the situations that are <span class="arm-defined-word">UNDEFINED</span>, either the second 16-bit instruction or the 32-bit instruction is <span class="arm-defined-word">UNDEFINED</span>.</p>
<p>An implementation might vary dynamically as to whether IT is treated as a 16-bit instruction or the first half of a 32-bit instruction.</p></td></tr></table><p>If an instruction in an active IT block that would be disabled by this field sets this field to 1 then behavior is <span class="arm-defined-word">CONSTRAINED UNPREDICTABLE</span>. For more information see <span class="xref">'Changes to an ITD control by an instruction in an IT block'</span>.</p>
<p>ITD is optional, but if it is implemented in the SCTLR then it must also be implemented in the <a href="AArch64-sctlr_el1.html">SCTLR_EL1</a>, <a href="AArch64-sctlr_el2.html">SCTLR_EL2</a>, and <a href="AArch32-hsctlr.html">HSCTLR</a>.</p><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul><p>When an implementation does not implement ITD, access to this field is <span class="access_level">RAZ/WI</span>.</p></div><h4 id="fieldset_0-6_6">UNK, bit [6]</h4><div class="field">
      <p>Writes to this bit are IGNORED. Reads of this bit return an <span class="arm-defined-word">UNKNOWN</span> value.</p>
    <p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to an architecturally <span class="arm-defined-word">UNKNOWN</span> value.</li></ul></div><h4 id="fieldset_0-5_5">CP15BEN, bit [5]</h4><div class="field">
      <p>System instruction memory barrier enable. Enables accesses to the DMB, DSB, and ISB System instructions in the (coproc==<span class="binarynumber">0b1111</span>) encoding space from PL1 and PL0:</p>
    <table class="valuetable"><tr><th>CP15BEN</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>PL0 and PL1 execution of the <a href="AArch32-cp15dmb.html">CP15DMB</a>, <a href="AArch32-cp15dsb.html">CP15DSB</a>, and <a href="AArch32-cp15isb.html">CP15ISB</a> instructions is <span class="arm-defined-word">UNDEFINED</span>.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>PL0 and PL1 execution of the <a href="AArch32-cp15dmb.html">CP15DMB</a>, <a href="AArch32-cp15dsb.html">CP15DSB</a>, and <a href="AArch32-cp15isb.html">CP15ISB</a> instructions is enabled.</p>
        </td></tr></table>
      <p>CP15BEN is optional, but if it is implemented in the SCTLR then it must also be implemented in the <a href="AArch64-sctlr_el1.html">SCTLR_EL1</a>, <a href="AArch64-sctlr_el2.html">SCTLR_EL2</a>, and <a href="AArch32-hsctlr.html">HSCTLR</a>.</p>
    <p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">1</span>.
</li></ul><p>When an implementation does not implement CP15BEN, access to this field is <span class="access_level">RAO/WI</span>.</p></div><h4 id="fieldset_0-4_4-1">LSMAOE, bit [4]<span class="condition"><br/>When FEAT_LSMAOC is implemented:
                        </span></h4><div class="field">
      <p>Load Multiple and Store Multiple Atomicity and Ordering Enable.</p>
    <table class="valuetable"><tr><th>LSMAOE</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>For all memory accesses at EL1 or EL0, A32 and T32 Load Multiple and Store Multiple can have an interrupt taken during the sequence memory accesses, and the memory accesses are not required to be ordered.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>The ordering and interrupt behavior of A32 and T32 Load Multiple and Store Multiple at EL1 or EL0 is as defined for Armv8.0.</p>
        </td></tr></table>
      <p>This bit is permitted to be cached in a TLB.</p>
    <p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">1</span>.
</li></ul></div><h4 id="fieldset_0-4_4-2"><span class="condition"><br/>Otherwise:
                        </span></h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES1</span>.</p>
    </div><h4 id="fieldset_0-3_3-1">nTLSMD, bit [3]<span class="condition"><br/>When FEAT_LSMAOC is implemented:
                        </span></h4><div class="field">
      <p>No Trap Load Multiple and Store Multiple to Device-nGRE/Device-nGnRE/Device-nGnRnE memory.</p>
    <table class="valuetable"><tr><th>nTLSMD</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>All memory accesses by A32 and T32 Load Multiple and Store Multiple at EL1 or EL0 that are marked at stage 1 as Device-nGRE/Device-nGnRE/Device-nGnRnE memory are trapped and generate a stage 1 Alignment fault.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>All memory accesses by A32 and T32 Load Multiple and Store Multiple at EL1 or EL0 that are marked at stage 1 as Device-nGRE/Device-nGnRE/Device-nGnRnE memory are not trapped.</p>
        </td></tr></table>
      <p>This bit is permitted to be cached in a TLB.</p>
    <p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">1</span>.
</li></ul></div><h4 id="fieldset_0-3_3-2"><span class="condition"><br/>Otherwise:
                        </span></h4><div class="field">
      <p>Reserved, <span class="arm-defined-word">RES1</span>.</p>
    </div><h4 id="fieldset_0-2_2">C, bit [2]</h4><div class="field">
      <p>Cacheability control, for data accesses at EL1 and EL0:</p>
    <table class="valuetable"><tr><th>C</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td>
          <p>All data access to Normal memory from PL1 and PL0, and all accesses to the PL1&amp;0 stage 1 translation tables, are Non-cacheable for all levels of data and unified cache.</p>
        </td></tr><tr><td class="bitfield">0b1</td><td>
          <p>All data access to Normal memory from PL1 and PL0, and all accesses to the PL1&amp;0 stage 1 translation tables, can be cached at all levels of data and unified cache.</p>
        </td></tr></table><p>The PE ignores SCTLR.C, and data accesses to Normal memory from EL1 and EL0 are Cacheable, if either:</p>
<ul>
<li>EL2 is using AArch32 and the value of <a href="AArch32-hcr.html">HCR</a>.DC is 1.
</li><li>EL2 is using AArch64 and the value of <a href="AArch64-hcr_el2.html">HCR_EL2</a>.DC is 1.
</li></ul><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><h4 id="fieldset_0-1_1">A, bit [1]</h4><div class="field">
      <p>Alignment check enable. This is the enable bit for Alignment fault checking at PL1 and PL0:</p>
    <table class="valuetable"><tr><th>A</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td><p>Alignment fault checking disabled when executing at PL1 or PL0.</p>
<p>Instructions that load or store one or more registers, other than load/store exclusive and load-acquire/store-release, do not check that the address being accessed is aligned to the size of the data element(s) being accessed.</p></td></tr><tr><td class="bitfield">0b1</td><td><p>Alignment fault checking enabled when executing at PL1 or PL0.</p>
<p>All instructions that load or store one or more registers have an alignment check that the address being accessed is aligned to the size of the data element(s) being accessed. If this check fails it causes an Alignment fault, which is taken as a Data Abort exception.</p></td></tr></table>
      <p>Load/store exclusive and load-acquire/store-release instructions have an alignment check regardless of the value of the A bit.</p>
    <p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><h4 id="fieldset_0-0_0">M, bit [0]</h4><div class="field">
      <p>MMU enable for EL1 and EL0 stage 1 address translation. Possible values of this bit are:</p>
    <table class="valuetable"><tr><th>M</th><th>Meaning</th></tr><tr><td class="bitfield">0b0</td><td><p>EL1 and EL0 stage 1 address translation disabled.</p>
<p>See the SCTLR.I field for the behavior of instruction accesses to Normal memory.</p></td></tr><tr><td class="bitfield">0b1</td><td>
          <p>EL1 and EL0 stage 1 address translation enabled.</p>
        </td></tr></table><p>The PE behaves as if the value of the SCTLR.M field is 0 for all purposes other than returning the value of a direct read of the field if either:</p>
<ul>
<li>EL2 is using AArch32 and the value of <a href="AArch32-hcr.html">HCR</a>.{DC, TGE} is not {0, 0}.
</li><li>EL2 is using AArch64 and the value of <a href="AArch64-hcr_el2.html">HCR_EL2</a>.{DC, TGE} is not {0, 0}.
</li></ul><p>The reset behavior of this field is:</p><ul><li>On a Warm reset, 
      this field resets
       to <span class="binarynumber">0</span>.
</li></ul></div><div class="access_mechanisms"><h2>Accessing SCTLR</h2><p>Accesses to this register use the following encodings in the System register encoding space:</p><h4 class="assembler">MRC{&lt;c&gt;}{&lt;q&gt;} &lt;coproc&gt;, {#}&lt;opc1&gt;, &lt;Rt&gt;, &lt;CRn&gt;, &lt;CRm&gt;{, {#}&lt;opc2&gt;}</h4><table class="access_instructions"><tr><th>coproc</th><th>opc1</th><th>CRn</th><th>CRm</th><th>opc2</th></tr><tr><td>0b1111</td><td>0b000</td><td>0b0001</td><td>0b0000</td><td>0b000</td></tr></table><p class="pseudocode">
if PSTATE.EL == EL0 then
    UNDEFINED;
elsif PSTATE.EL == EL1 then
    if EL2Enabled() &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HSTR_EL2.T1 == '1' then
        AArch64.AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HSTR.T1 == '1' then
        AArch32.TakeHypTrapException(0x03);
    elsif EL2Enabled() &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HCR_EL2.TRVM == '1' then
        AArch64.AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HCR.TRVM == '1' then
        AArch32.TakeHypTrapException(0x03);
    elsif HaveEL(EL3) &amp;&amp; ELUsingAArch32(EL3) then
        R[t] = SCTLR_NS;
    else
        R[t] = SCTLR;
elsif PSTATE.EL == EL2 then
    if HaveEL(EL3) &amp;&amp; ELUsingAArch32(EL3) then
        R[t] = SCTLR_NS;
    else
        R[t] = SCTLR;
elsif PSTATE.EL == EL3 then
    if SCR.NS == '0' then
        R[t] = SCTLR_S;
    else
        R[t] = SCTLR_NS;
                </p><h4 class="assembler">MCR{&lt;c&gt;}{&lt;q&gt;} &lt;coproc&gt;, {#}&lt;opc1&gt;, &lt;Rt&gt;, &lt;CRn&gt;, &lt;CRm&gt;{, {#}&lt;opc2&gt;}</h4><table class="access_instructions"><tr><th>coproc</th><th>opc1</th><th>CRn</th><th>CRm</th><th>opc2</th></tr><tr><td>0b1111</td><td>0b000</td><td>0b0001</td><td>0b0000</td><td>0b000</td></tr></table><p class="pseudocode">
if PSTATE.EL == EL0 then
    UNDEFINED;
elsif PSTATE.EL == EL1 then
    if EL2Enabled() &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HSTR_EL2.T1 == '1' then
        AArch64.AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HSTR.T1 == '1' then
        AArch32.TakeHypTrapException(0x03);
    elsif EL2Enabled() &amp;&amp; !ELUsingAArch32(EL2) &amp;&amp; HCR_EL2.TVM == '1' then
        AArch64.AArch32SystemAccessTrap(EL2, 0x03);
    elsif EL2Enabled() &amp;&amp; ELUsingAArch32(EL2) &amp;&amp; HCR.TVM == '1' then
        AArch32.TakeHypTrapException(0x03);
    elsif HaveEL(EL3) &amp;&amp; ELUsingAArch32(EL3) then
        SCTLR_NS = R[t];
    else
        SCTLR = R[t];
elsif PSTATE.EL == EL2 then
    if HaveEL(EL3) &amp;&amp; ELUsingAArch32(EL3) then
        SCTLR_NS = R[t];
    else
        SCTLR = R[t];
elsif PSTATE.EL == EL3 then
    if SCR.NS == '0' &amp;&amp; CP15SDISABLE == Signal_High then
        UNDEFINED;
    elsif SCR.NS == '0' &amp;&amp; CP15SDISABLE2 == Signal_High then
        UNDEFINED;
    else
        if SCR.NS == '0' then
            SCTLR_S = R[t];
        else
            SCTLR_NS = R[t];
                </p></div><hr class="bottom_line"/><table style="margin: 0 auto;"><tr><td><div class="topbar"><a href="AArch32-regindex.html">AArch32 Registers</a></div></td><td><div class="topbar"><a href="AArch64-regindex.html">AArch64 Registers</a></div></td><td><div class="topbar"><a href="AArch32-sysindex.html">AArch32 Instructions</a></div></td><td><div class="topbar"><a href="AArch64-sysindex.html">AArch64 Instructions</a></div></td><td><div class="topbar"><a href="enc_index.html">Index by Encoding</a></div></td><td><div class="topbar"><a href="ext_alpha_index.html">External Registers</a></div></td><td><div class="topbar"><a href="ext_enc_index.html">External Registers by Offset</a></div></td><td><div class="topbar"><a href="func_index.html">Registers by Functional Group</a></div></td><td><div class="topbar"><a href="notice.html">Proprietary Notice</a></div></td></tr></table><p class="versions">30/03/2023 19:07; 997dd0cf3258cacf72aa7cf7a885f19a4758c3af</p><p class="copyconf">Copyright © 2010-2023 Arm Limited or its affiliates. All rights reserved. This document is Non-Confidential.</p></body>
</html>
